home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gigantic Games 2
/
Gigantic Games 2.iso
/
pc
/
_w_
/
wordsearch
/
src
/
puzzle.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-12-23
|
3KB
|
154 lines
#include <stdio.h>
#include <exec/types.h>
#include <exec/libraries.h>
#include "interface.h"
#include <libraries/reqbase.h>
#include <proto/req.h>
#include "wsearch.h"
#include "funcs.h"
extern BOOL DispKey;
BOOL AllocDims()
{
char *tkey, *tpuzzle, *tdisplay;
tkey = key;
tpuzzle = puzzle;
tdisplay = display;
key = (char *)calloc((px+1)*(py+1),sizeof(char));
if(key<=0)
{
SimpleRequest("Unable to Allocate Memory for new Key");
key = tkey;
return(FALSE);
}
puzzle = (char *)calloc((px+1)*(py+1),sizeof(char));
if(puzzle<=0)
{
SimpleRequest("Unable to Allocate Memory for new Puzzle");
puzzle = tpuzzle;
free(key);
key = tkey;
return(FALSE);
}
display = (char *)calloc((max(px,py)+1)*(max(px,py)+2),sizeof(char));
if(display<=0)
{
SimpleRequest("Unable to Allocate Memory for new Display");
display = tdisplay;
free(key);
key = tkey;
free(puzzle);
puzzle = tpuzzle;
return(FALSE);
}
if(tkey!=NULL)
free(tkey);
if(tpuzzle!=NULL)
free(tpuzzle);
if(tdisplay!=NULL)
free(tdisplay);
return(TRUE);
}
BOOL Dimensions()
{
struct GetLongStruct GLS;
GLS.minlimit = 2;
GLS.maxlimit = MAXPUZ;
GLS.versionnumber = REQVERSION;
GLS.flags = 0;
GLS.rfu2 = 0;
GLS.window = DPWin;
GLS.titlebar = "Enter Width of Puzzle";
GLS.defaultval = px+1;
if(GetLong(&GLS)==FALSE) return(FALSE);
px = GLS.result-1;
GLS.titlebar = "Enter Height of Puzzle";
GLS.defaultval = py+1;
if(GetLong(&GLS)==FALSE) return(FALSE);
py = GLS.result-1;
/* printf("Enter puzzle dimensions (width height)\n");
scanf("%d %d",&px,&py);
px = px-1; py=py-1;
*/
if(AllocDims()==FALSE)
return(FALSE);
else
return(TRUE);
}
void NewKey()
{
int i,j,error;
for(i=0;i<=px;i++)
for(j=0;j<=py;j++)
Key(i,j) = ' ';
error = wsearch();
if(error!=0 && error!=-1)
{
SimpleRequest("Cannot generate Key (a word won't fit)");
}
}
void NewPuzzle()
{
int i,j;
for(i=0;i<=px;i++)
for(j=0;j<=py;j++)
if(Key(i,j) == ' ')
Puzzle(i,j) = (char)(randint(25)+65);
else
Puzzle(i,j) = Key(i,j);
}
void NewDisplay()
{
int xs,xt,xi,ys,yt,yi;
int i,j,k,l;
char *ptr;
if(DispKey==TRUE)
ptr = &Key(0,0);
else
ptr = &Puzzle(0,0);
switch(rot)
{
case 1:xs=0 ;ys=0 ;xt=px+1;yt=py+1;xi= 1;yi= 1;break;
case 2:xs=px;ys=0 ;xt=-1 ;yt=py+1;xi=-1;yi= 1;break;
case 3:xs=0 ;ys=py;xt=px+1;yt=-1 ;xi= 1;yi=-1;break;
case 4:xs=px;ys=py;xt=-1 ;yt=-1 ;xi=-1;yi=-1;break;
case 5:xs=0 ;ys=0 ;xt=py+1;yt=px+1;xi= 1;yi= 1;break;
case 6:xs=0 ;ys=px;xt=py+1;yt=-1 ;xi= 1;yi=-1;break;
case 7:xs=py;ys=0 ;xt=-1 ;yt=px+1;xi=-1;yi= 1;break;
case 8:xs=py;ys=px;xt=-1 ;yt=-1 ;xi=-1;yi=-1;break;
}
l = 0;
for(j=ys;j!=yt;j=j+yi)
{
k = 0;
for(i=xs;i!=xt;i=i+xi)
{
if(rot<5)
Display(l,k) = *(ptr + i*(py+1) + j);
else
Display(l,k) = *(ptr + j*(py+1) + i);
k++;
}
Display(l,k)=0;
l++;
}
}